我們接下來會建立以下幾個頁面
昨天我們做了刪除任務的icon,今天來做共享任務的表單。
urls.py
文件中,我們使用 path()
定義了一個路徑,並綁定到 share_task
函數。這個路徑的作用是處理分享任務的請求,並傳遞一個 id
參數(這裡使用的是 slug
,通常是數字或字母組成的唯一標識符)。path('task/share/<slug:id>/',share_task),
share_task
在 views.py
中,我們定義了 share_task
函數,這裡的主要邏輯是允許使用者通過輸入其他使用者名稱來分享任務。
@login_required
def share_task(request,id):
user = request.user
tasks = Task.objects.filter(user_id=user)
# 取得共享的任務
sharedTasks = SharedTask.objects.filter(Q(user=user) | Q(task__user_id=user))
# 排除共享任務後的我的任務
my_tasks = tasks.exclude(id__in=sharedTasks.values_list('task__id', flat=True))
task = Task.objects.get(id=id)
if request.method == 'POST':
form = ShareForm(request.POST)
if form.is_valid():
try:
user_name = form.cleaned_data['user'].strip()
username = User.objects.get(username=user_name)
# 检查是否已存在相同的共享任务
existing_shared_task = SharedTask.objects.filter(task=task, user=username).first()
if existing_shared_task or user==username:
error_message = "該使用者已經共享此任務"
return render(request, 'edit_task.html', locals())
try:
share_id = SharedTask.objects.latest('id').id + 1
except:
share_id = 0
SharedTask.objects.create(id=share_id, task=task, user=username)
add_log(task, user, f"{user.username}分享給{username.username}")
return redirect('task') # 重定向到任務列表頁面
except Exception as e:
error_message = "沒有該名使用者"
return render(request, 'edit_task.html', locals())
else:
form = ShareForm()
action = "分享"
return render(request, 'edit_task.html', locals())
ShareForm
在 forms.py
中定義了 ShareForm
,該表單用於輸入想要分享任務的使用者名稱。
class ShareForm(forms.Form):
user = forms.CharField(label='使用者名稱', max_length=100)
共享任務前
共享表單
共享後